#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <sys/un.h>

#include <unistd.h>
#include <string.h>

#define SOCK_PATH "/tmp/my.sock"

int main(int argc, char const *argv[])
{
    // 1. 创建socket套接字
    int cfd = socket(AF_UNIX, SOCK_STREAM, 0);
    if(cfd == -1){
        perror("socket");
        return -1;
    }

    printf("--socket(%d) ok--\n", cfd);

    // 2. 定义本地的socket文件地址
    struct sockaddr_un uaddr = { AF_UNIX, SOCK_PATH};
   
    // 3. 尝试与本地的socket文件绑定的进程进行通信
    if( connect(cfd, (struct sockaddr *)&uaddr, sizeof(uaddr))  != 0){
        perror("connect");
        close(cfd);
        return -1;
    }

    
    char buf[128] = "";
    if(fork() == 0){  // 子进程负责收
        while(1){
            bzero(buf, 128); 
            read(cfd, buf, 128);  // 接收数据
            printf("A: %s\n", buf);
            if(strncmp(buf, "exit", 4) == 0) break;
        }
        _exit(0);
    }

    // 从键盘输入 要发送的消息
    while(1){
        bzero(buf, 128); 
        fgets(buf, 128, stdin);
        buf[strlen(buf) - 1] = 0;
        write(cfd, buf, strlen(buf));  // 发送数据
        usleep(1000); // 1ms
        if(strncmp(buf, "exit", 4) == 0) break;

    }
    wait(NULL);
    close(cfd);
    printf("---over---\n");
    return 0;
}
